﻿using System.Text.RegularExpressions;
using Newtonsoft.Json.Linq;

namespace fCloud.SensorApi.Helper;

public partial class JsonCleaner
{
    private static readonly ILogger<JsonCleaner> _logger;
    public static string CleanTruncatedJson(string rawJson)
    {
        if (string.IsNullOrEmpty(rawJson)) return string.Empty;

        // Step 1: 过滤非 UTF-8 字符（保留 ASCII 可见字符）
        var cleanedJson = MyRegex().Replace(rawJson, "");

        // Step 2: 查找最后一个有效闭合位置 "}]}"
        var endIndex = FindLastValidClosure(cleanedJson);
        if (endIndex <= 0) return string.Empty; // 未找到有效结构

        // Step 3: 截取有效部分
        var validJson = cleanedJson.Substring(0, endIndex);

        // Step 4: 验证 JSON 结构（可选）
        if (!IsValidJson(validJson))
        {
            // throw new ArgumentException("清理后的 JSON 仍不合法");
            _logger.LogWarning("清理后的 JSON 仍不合法");
        }

        return validJson;
    }

    private static int FindLastValidClosure(string json)
    {
        // 从后向前搜索 "}]}" 的位置（根据实际结构可调整）
        var index = json.LastIndexOf("}]}}", StringComparison.Ordinal);
        if (index >= 0) return index + 4; // 包含闭合符号本身

        // 兼容其他可能的闭合模式（如单个 "}")
        index = json.LastIndexOf('}');
        return index >= 0 ? index + 1 : 0;
    }

    private static bool IsValidJson(string json)
    {
        try
        {
            JToken.Parse(json);
            return true;
        }
        catch
        {
            return false;
        }
    }

    [GeneratedRegex(@"[^\u0000-\u007F]")]
    private static partial Regex MyRegex();
}